string parser_error_message(int kind, object ob, mixed arg, int flag)
{
	string ret;
	if (ob)
	ret = ob->short() + ": ";
	else
	ret = "";

	switch (kind)
	{
		case 1:
			if (flag)
				return ret + "There is no such " + arg + " here.\n";
			else
				return ret + "There is no " + arg + " here.\n";
			break;
		case 2:
			if (flag)
				return ret + "None of the " + pluralize(arg) + " are alive.\n";
			else
				return ret + "The " + arg + " isn't alive.\n";
			break;
		case 3:
			if (flag)
				return ret + "You can't reach them.\n";
			else
				return ret + "You can't reach it.\n";
			break;
		case 4:
		{
			array
			descs = unique_array(arg, (: $1->the_short() :));
			string str;

			if (sizeof(descs) == 1)
			return ret + "Which " + descs[0][0]->short() + " do you mean?\n";
			str = ret + "Do you mean ";
			for (int i = 0; i < sizeof(descs); i++)
			{
				if (sizeof(descs[i]) > 1)
					str += "one of ";
				str += descs[i][0]->the_short();
				if (i == sizeof(descs) - 1)
					str += " or ";
				else
					str += ", ";
			}
			return str + "?\n";
		}
			break;
		case 5:
			if (arg > 1)
				return ret + "There are only " + arg + " of them.\n";
			else
				return ret + "There is only one of them.\n";
			break;
		case 6:
			return ret + arg;
		case 7:
			return ret + "There is no " + arg + " here.\n";
		case 8:
			return ret
			        + "You can't use more than one object at a time with that verb.\n";
	}
}
